/************************************************************************
 * <br>
 * <ul>
 * <li>版权所有：唐山弘川科技有限公司 2009－2020</li>
 * <li>创建日期：2009-8-10</li>
 * <li>初始作者：刘川</li>
 * </ul>
 * <ul>
 * <b>修订历史</b>
 * <li>1、</li>
 * </ul>
 ***********************************************************************/
package com.hy.enterprise.framework.persistence.domain.query.internal.managedobjects ;

/**
 * <ul>
 * <li>设计作者：刘川</li>
 * <li>设计日期：2009-8-10</li>
 * <li>设计时间：下午02:31:29</li>
 * <li>设计目的：简单聚合表达式</li>
 * </ul>
 * <ul>
 * <b>修订历史</b>
 * <li>1、</li>
 * </ul>
 */
public class SimpleAggregateExpression extends LibraManagedObject
{
	/**
	 * <ul>
	 * <li>设计作者：刘川</li>
	 * <li>设计日期：2009-8-10</li>
	 * <li>设计时间：下午02:32:05</li>
	 * <li>设计目的：表现聚合函数的枚举</li>
	 * </ul>
	 * <ul>
	 * <b>修订历史</b>
	 * <li>1、</li>
	 * </ul>
	 */
	public enum Function
	{
		AVG (
		     "AVG" ) ,
		COUNT (
		       "COUNT" ) ,
		MAX (
		     "MAX" ) ,
		MIN (
		     "MIN" ) ,
		SUM (
		     "SUM" ) ;
		/**
		 * 
		 */
		final String	stringForm ;

		/**
		 * 构造函数
		 * 
		 * @param stringForm
		 */
		private Function (
		                   String stringForm )
		{
			this.stringForm =
			                  stringForm ;
		}
	}

	/**
	 * Libra平台托管对象
	 */
	private final LibraManagedObject	argument ;
	/**
	 * 聚合函数
	 */
	private final Function	         function ;

	/**
	 * 构造函数
	 * 
	 * @param function
	 * @param libraManagedObject
	 */
	public SimpleAggregateExpression (
	                                   Function function ,
	                                   LibraManagedObject libraManagedObject )
	{
		this.function =
		                function ;
		this.argument =
		                libraManagedObject ;
	}

	/**
	 * @see com.hy.enterprise.framework.persistence.domain.query.internal.managedobjects.LibraManagedObject#getTargetRepresentation()
	 */
	@ Override
	public String getTargetRepresentation ( )
	{
		return this.function.stringForm
		       + "("
		       + this.argument
		                      .getPreferredStringRepresentation ( )
		       + ")" ;
	}
}
